home *** CD-ROM | disk | FTP | other *** search
/ Technotools / Technotools (Chestnut CD-ROM)(1993).ISO / lang_c / matopcpp / matrix.cpp next >
C/C++ Source or Header  |  1990-10-15  |  3KB  |  133 lines

  1. #include <iostream.h>
  2.  
  3. class Matrix {
  4.  
  5.   private:
  6.     int rows,cols;
  7.     int **p;    // base of array
  8.  
  9.   public:
  10.     Matrix(void);
  11.     Matrix(int,int);
  12.     ~Matrix(void);
  13.     void LoadMat(void);
  14.     void DisplayMat(void);
  15.     void operator= (Matrix&);
  16.     Matrix operator+ (Matrix&);
  17.     Matrix operator- (Matrix&);
  18. };
  19.  
  20. Matrix::Matrix(void) {
  21.     cout << "Enter the number of rows";
  22.     cin >> rows;
  23.     cout << "Enter the number of columns";
  24.     cin >> cols;
  25.     p = new *[rows];
  26.     for (int i=0; i < rows; ++i)
  27.         p[i] = new int[cols];
  28. }
  29. Matrix::Matrix(int inrows, int incols) {
  30.     rows = inrows;
  31.     cols = incols;
  32.     p = new *[rows];
  33.     for (int i=0; i < rows; ++i)
  34.         p[i] = new int[cols];
  35.     cout << " Contructor " << p << "\n";
  36. }
  37.  
  38. Matrix::~Matrix(void) {
  39.     cout << " Destructor " << p << "\n";
  40.     for (int i=0; i < rows; ++i)
  41.         delete p[i];
  42.     delete p;
  43. }
  44.  
  45. void Matrix::DisplayMat(void) {
  46.     for (int i=0; i < rows; ++i) {
  47.         for (int j=0; j < cols; ++j) {
  48.             cout << p[i][j] << " ";
  49.         }
  50.         cout << "\n";
  51.     }
  52.     cout << "\n";
  53. }
  54.  
  55. void Matrix::LoadMat(void) {
  56.     for (int i=0; i < rows; ++i)
  57.         p[i] = new int[cols];
  58.     for (int j=0; j<rows; ++j) {
  59.         for (int k=0; k < cols; ++k) {
  60.             cout << "Enter (" << j << "," << k << ")";
  61.             cin >> p[j][k];
  62.         }
  63.     }
  64. }
  65.  
  66. void Matrix::operator= (Matrix& RightOp) {
  67.     if (rows == RightOp.rows && cols == RightOp.cols) {
  68.         for (int i=0; i < rows; ++i) {
  69.             for (int j=0; j < cols; ++j) {
  70.                 p[i][j] = RightOp.p[i][j];
  71.             }
  72.         }
  73.     }
  74.     else {
  75.         delete p;
  76.         rows = RightOp.rows;
  77.         cols = RightOp.cols;
  78.         p = new *[rows];
  79.         for (int i=0; i < rows; ++i)
  80.             p[i] = new int[cols];
  81.         for (int j=0; j<rows; ++j) {
  82.             for (int k=0; k < cols; ++k) {
  83.                 p[j][k] = RightOp.p[j][k];
  84.             }
  85.         }
  86.     }
  87. }
  88.  
  89. Matrix Matrix::operator+ (Matrix& RightOp) {
  90.     if (rows == RightOp.rows && cols == RightOp.cols) {
  91.         Matrix temp(rows,cols);
  92.         for (int i=0; i < rows; ++i) {
  93.             for (int j=0; j < cols; ++j) {
  94.                 temp.p[i][j] = p[i][j] + RightOp.p[i][j];
  95.             }
  96.         }
  97.         return (temp);
  98.     }
  99.     else {
  100.         cout << "Mismatched Matrix sizes in addition function\n";
  101.     }
  102. }
  103.  
  104. Matrix Matrix::operator- (Matrix& RightOp) {
  105.     if (rows == RightOp.rows && cols == RightOp.cols) {
  106.         Matrix temp(rows,cols);
  107.         for (int i=0; i < rows; ++i) {
  108.             for (int j=0; j < cols; ++j) {
  109.                 temp.p[i][j] = p[i][j] - RightOp.p[i][j];
  110.             }
  111.         }
  112.         return (temp);
  113.     }
  114.     else {
  115.         cout << "Mismatched Matrix sizes in subtraction function\n";
  116.     }
  117. }
  118.     
  119.  
  120. main() {
  121.  
  122.     Matrix a(2,2),b(2,2),c(2,2);
  123.  
  124.     a.LoadMat();
  125.     b.LoadMat();
  126.  
  127.     c=a+b+a+b;
  128.  
  129.     a.DisplayMat();
  130.     b.DisplayMat();
  131.     c.DisplayMat();           
  132.  
  133. }